# 8.tuple 元组数据类型

# 元组类型 (Tuple)

元组,称不可变的列表,又被称为只读列表,元组也是Python的基本数据类型之一

元组格式:() 使用小括号 括起来,里面可以放任何数据类型的数据,多个值通过 ,逗号分隔

可查询,可循环,可切片,就是不能改

关于元组不可变,这里指的是:子元素不可变,而子元素内部的元素可变,这要取决于子元素是否是可变对象

**注意:**如果元组只有一个值,一定要在后面在加一个逗号,不然就不是元组

so = (10)
print(type(so))

执行结果:
<class 'int'>

=====================================

so = (10,)
print(type(so))

执行结果:
<class 'tuple'>

# 空元组的格式

在列表中,代表列表的空列表可以直接不写值:变量 = []

但是在元组不行,因为小括号在其它方面也有相对的应用

格式:变量 = tuple()

so = tuple()
print(type(so))

执行结果:
<class 'tuple'>

# 索引

索引也称为下标,在python中索引也是下标是从0开始

反向索引:python中反向索引是从-1开始

索引就是字符串的下标位置

格式:变量[下标值]

so = ("周杰伦", "林俊杰", "周润发", "周芷若")
print(so[3])

执行结果:
周芷若

​ 以上的实例,获取到了下标为3的元组数据

so = ("周杰伦", "林俊杰", "周润发", "周芷若")
print(so[-3])

执行结果:
林俊杰

​ 以上实例,通过反向索引获取元组中的反向第三位数据,从-1开始算

# 切片

切片可以对元组进行截取取值,从0开始,反向切片从-1开始

反向切片,默认是从左向右切

切片之后类型还是元组类型

特点:起始值可取,结束值不可取

格式:变量[起始位置 : 结束位置]

so = ("周杰伦", "林俊杰", "周润发", "周芷若")
print(so[1:3])

执行结果:
('林俊杰', '周润发')

​ 以上实例:通过获取,起始位置为:1 结束位置为:3的值

so = ("周杰伦", "林俊杰", "周润发", "周芷若")
print(so[1:3] + so[2:4])

执行结果:
('林俊杰', '周润发', '周润发', '周芷若')

​ 以上实例:能过 + 运算符,把两边的数据合并起来为一个列表

so = ("周杰伦", "林俊杰", "周润发", "周芷若")
print(so[:3])

执行结果:
('周杰伦', '林俊杰', '周润发')

​ 以上实例,如果起始位置不填,默认从开头开始

so = ("周杰伦", "林俊杰", "周润发", "周芷若")
print(so[2:])

执行结果:
('周润发', '周芷若')

​ 以上实例,如果结束位置不填,默认到结尾

so = ("周杰伦", "林俊杰", "周润发", "周芷若")
print(so[:])

执行结果:
("周杰伦", "林俊杰", "周润发", "周芷若")

​ 以上实例,如果起始跟结束位置都不填写,默认从头到尾执行

# 反向切片

反向切片,默认是从左向右切

特点:起始值可取,结束值不可取

格式:变量[起始位置 : 结束位置]

so = ("周杰伦", "林俊杰", "周润发", "周芷若")
print(so[-3:-1])

执行结果:
('林俊杰', '周润发')

# 步长

步长,可以在指定范围内,每几个取一个值

取值,取范围中的开头值

反向步长,以右向左方向取值

格式:变量[起始位置 : 结束位置 : 步长]

so = ("周杰伦", "林俊杰", "周润发", "周芷若")
print(so[::2])

执行结果:
('周杰伦', '周润发')

​ 以上实例:每走二步,取一个值

so = ("周杰伦", "林俊杰", "周润发", "周芷若")
print(so[::-2])

执行结果:
('周芷若', '林俊杰')

​ 以上实例:反向步长,反向取值

# for循环遍历元组

so = ("周杰伦", "林俊杰", "周润发", "周芷若")
for io in so:
    print(io)
    
执行结果:
周杰伦
林俊杰
周润发
周芷若

# 元组中的列表类型修改数据

元组本身是不可以修改的,但是元组中的列表类型是可以修改,因为只修改了其中的列表数据,并没修改元组本身

so = ("周杰伦", "林俊杰", "周润发",["国","之","烈"], "周芷若")
so[3].append("士")
print(so)

执行结果:
('周杰伦', '林俊杰', '周润发', ['国', '之', '烈', '士'], '周芷若')